package com.cgmnx.admin.service.rbac;

import com.cgmnx.admin.common.bean.Limiter;
import com.cgmnx.admin.common.enums.ValidEnumType;
import com.cgmnx.admin.dao.entity.rbac.ResourceEntity;
import com.cgmnx.admin.dao.entity.rbac.ResourceTree;

import java.util.List;


public interface ResourceService {

    /**
     * 添加新的uri到数据库
     *
     * @param resourceEntity
     * @return
     */
    Integer save(ResourceEntity resourceEntity);

    /**
     * 更新uri对象，并且返回新的uri
     *
     * @param resourceEntity
     * @return
     */
    Integer update(ResourceEntity resourceEntity);

    /**
     * 根据uriId查询其所有子节点（没有孙节点），不包含自身
     *
     * @param parentId
     * @return
     */
    List<ResourceEntity> queryChildren(int parentId);

    /**
     * 查询uri树
     *
     * @param uriId
     * @return
     */
    List<ResourceTree> queryTree(final int uriId);

    /**
     * 批量删除url，目前策略是如果有一个删除失败，则整个删除操作将返回失败
     *
     * @param list
     * @return
     */
    boolean batchDelete(List<Integer> list);

    List<ResourceEntity> queryPage(String searchName, Limiter limiter);

    ResourceEntity query(Integer resourceId);

    Integer count(String searchName);

    void updateStatus(List<Integer> idList, ValidEnumType invalid);

    List<ResourceEntity> queryByRoleId(Integer roleId);

    List<ResourceEntity> queryByUserId(String userId);

    void updateNodeCountIncr(Integer id);

    void updateNodeCountDecr(Integer id);

    List<ResourceEntity> queryAll();

    List<ResourceEntity> queryList(List<Integer> resourceIdList);
}
